package club.controller;

import club.pojo.User;
import club.service.UserService;
import club.util.Message;
import com.github.pagehelper.PageInfo;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.annotation.Resource;
import javax.servlet.http.HttpSession;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.bind.annotation.RequestParam;


@Controller
@RequestMapping("/user")
public class UserController {

    @Resource
    private UserService userService;
    // 用户服务层依赖注入

    /**
     * 注册新用户
     * @param user 用户对象（包含用户名、密码等信息）
     * @return Message.success() 或 Message.fail() 根据注册结果返回
     */
    @RequestMapping("/create")
    @ResponseBody
    public Message add(User user) {
        int add = userService.add(user);
        // 调用服务层添加用户
        return add > 0 ? Message.success() : Message.fail();
        // 根据影响行数判断成功与否
    }

    /**
     * 用户登录
     * @param session HTTP会话（用于存储登录用户信息）
     * @param userName 用户名
     * @param password 密码
     * @return Message.success() 携带用户信息（键："user"）或失败消息
     */
    @RequestMapping("/login")
    @ResponseBody
    public Message loginuser(HttpSession session, String userName, String password) {
        User user = userService.loginuser(userName, password);
        // 调用服务层验证登录
        if (user != null) {
            session.setAttribute("user", user);
            // 登录成功，存入会话
            return Message.success().add("user", user);
            // 返回用户信息
        } else {
            return Message.fail();
            // 登录失败
        }
    }

    /**
     * 用户登出
     * @param session HTTP会话
     * @return Message.success() 表示登出成功
     */
    @RequestMapping("/logout")
    @ResponseBody
    public Message logout(HttpSession session) {
        session.invalidate();
        // 使会话失效，清除用户信息
        return Message.success();
        // 返回成功状态
    }

    /**
     * 分页查询用户列表（支持用户名筛选）
     * @param userName 用户名（可选，用于模糊查询）
     * @param pageNum 页码（必填，默认值通过服务层处理）
     * @return Message.success() 携带分页数据（键："pageInfo"，值：PageInfo<User>）
     */
    @RequestMapping("/users")
    @ResponseBody
    public Message users(@RequestParam(required = false) String userName, @RequestParam("pn") Integer pageNum) {
        Integer pageSize = 4;
        // 每页固定显示4条用户记录
        PageInfo<User> users = userService.allUser(userName, pageNum, pageSize);
        // 调用服务层分页查询
        return Message.success().add("pageInfo", users);
        // 返回分页结果
    }

    /**
     * 根据ID查询用户详情
     * @param id 用户ID（必填）
     * @return Message.success() 携带用户对象（键："user"，值：User）
     */
    @RequestMapping("findById")
    @ResponseBody
    public Message findById(Integer id) {
        User byId = userService.findById(id);
        // 调用服务层查询用户
        return Message.success().add("user", byId);
        // 返回用户信息
    }

    /**
     * 删除用户记录（物理删除）
     * @param id 用户ID（必填）
     * @return Message.success() 或 Message.fail() 根据删除结果返回
     */
    @RequestMapping("/delete")
    @ResponseBody
    public Message del(Integer id) {
        int del = userService.del(id);
        // 调用服务层执行删除
        return del > 0 ? Message.success() : Message.fail();
        // 根据影响行数判断成功与否
    }

    /**
     * 跳转到"关于"页面
     */
    @RequestMapping("/about")
    public String about() {
        return "user/about";
    }

    /**
     * 跳转到"错误"页面
     */
    @RequestMapping("/error")
    public String error() {
        return "user/error";
    }

    /**
     * 跳转到用户"首页"
     */
    @RequestMapping("/index")
    public String index() {
        return "user/index";
    }

    /**
     * 跳转到"个人信息"页面
     */
    @RequestMapping("/personal-info")
    public String personalInfo() {
        return "user/personal-info";
    }

    /**
     * 跳转到"服务"页面
     */
    @RequestMapping("/service")
    public String service() {
        return "user/service";
    }

    /**
     * 跳转到"展示"页面
     */
    @RequestMapping("/show")
    public String show() {
        return "user/show";
    }

    /**
     * 跳转到"团队"页面
     */
    @RequestMapping("/team")
    public String team() {
        return "user/team";
    }

    /**
     * 跳转到"团队博客"页面
     */
    @RequestMapping("/teamBlog")
    public String teamBlog() {
        return "user/teamBlog";
    }

    // ======================== 用户信息更新方法 ========================
    /**
     * 更新用户基本信息（非图片部分）
     * @param user 用户对象（包含更新后的信息，必须包含ID）
     * @return Message.success() 或 Message.fail() 根据更新结果返回
     */
    @RequestMapping("/update")
    @ResponseBody
    public Message update(User user) {
        Integer update = userService.update(user);
        // 调用服务层更新用户信息
        return update > 0 ? Message.success() : Message.fail();
        // 根据影响行数判断成功与否
    }

    /**
     * 更新用户头像
     * @param session HTTP会话（获取当前登录用户）
     * @param file 上传的头像文件
     * @return Message.success() 或 Message.fail() 根据更新结果返回
     */
    @RequestMapping("/updatePic")
    @ResponseBody
    public Message updatePic(HttpSession session, MultipartFile file) {
        String fileName = FileLoad.uploadUserPic(file);
        // 调用文件上传工具类保存头像
        User user = (User) session.getAttribute("user");
        // 获取当前用户
        user.setPic(fileName);
        // 更新用户头像路径
        Integer update = userService.update(user);
        // 调用服务层更新用户记录
        return update > 0 ? Message.success() : Message.fail();
        // 根据影响行数判断成功与否
    }
}